\documentclass[french,12pt,a4paper,oneside,notitlepage]{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[margin=2.5cm]{geometry}
\usepackage[french]{babel}
\usepackage{xcolor}
\usepackage{times}
\usepackage{graphicx}
\usepackage{amsthm}
\usepackage{fourier}
\usepackage{hyperref}   % links im text
%\usepackage{enumerate}  % for advanced numbering of lists
\usepackage{fancyhdr}  
\usepackage{caption}
\usepackage{listings}
%\usepackage{mathtools}
\usepackage[protrusion=true,expansion=true]{microtype}
\makeatletter
\definecolor{bl}{rgb}{0,0.2,0.6}
\let\LaTeX@startsection\@startsection
\renewcommand{\@startsection}[6]{\LaTeX@startsection%
{#1}{#2}{#3}{#4}{#5}{\color{bl}\raggedright #6}}
\renewcommand{\thesection}{\@arabic\c@section}{\color{bl}}
\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
  {-3.25ex\@plus -1ex \@minus -.2ex}%
  {1.5ex \@plus .2ex}%
  {\normalfont\normalsize\bfseries}}
\makeatother

\DeclareCaptionFont{white}{\color{white}}
\DeclareCaptionFormat{listing}{%
  \parbox{\textwidth}{\colorbox{gray}{\parbox{\textwidth}{#1#2#3}}}}
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white}
\lstset{frame=lrb,xleftmargin=\fboxsep,xrightmargin=-\fboxsep}

\lstset{
 	language=C++,
% 	captionpos=b,
 	tabsize=3,
 	frame=single,
 	xleftmargin=\fboxsep,
 	xrightmargin=-\fboxsep,
 	keywordstyle=\color{blue},
 	commentstyle=\color{gray},
 	stringstyle=\color{green},
	extendedchars=true,
% 	numbers=left,
 	numberstyle=\tiny,
 	numbersep=5pt,
 	breaklines=true,
 	showstringspaces=false,
 	basicstyle=\footnotesize\ttfamily,
 	emph={label},
 	inputencoding=utf8,
 	extendedchars=true, 	
 	  literate=%
 	  {é}{{\'{e}}}1
 	  {è}{{\`{e}}}1
 	  {ê}{{\^{e}}}1
 	  {ë}{{\¨{e}}}1
 	  {û}{{\^{u}}}1
 	  {ù}{{\`{u}}}1
 	  {â}{{\^{a}}}1
 	  {à}{{\`{a}}}1
 	  {î}{{\^{i}}}1
 	  {ç}{{\c{c}}}1
 	  {Ç}{{\c{C}}}1
 	  {É}{{\'{E}}}1
 	  {Ê}{{\^{E}}}1
 	  {À}{{\`{A}}}1
 	  {Â}{{\^{A}}}1
 	  {Î}{{\^{I}}}1	
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand\yourName{KHONG Minh Thanh, P17 SIM}
\newcommand\yourKeywords{TP 4 : Vision 3D}
\newcommand\yourNumber{1}
\newcommand\yourTitle{\Huge Vision par Ordinateur\\ \Large  
TP 4 : Vision 3D}

\hypersetup { 
  pdfauthor   = {\yourName}, 
  pdfkeywords = {\yourKeywords}, 
  pdftitle    = {\yourTitle} 
}


\begin{document}
%\newcommand{\myparagraph}[1]{\paragraph{#1}\mbox{}\\}
\author{\yourName}
\title{\yourTitle}
\maketitle


%	\begin{center}
%	  \begin{figure}[ht]
%			\includegraphics[height=3.5cm]{./images/fg10.jpg}
%		  ~\includegraphics[height=3.5cm]{./images/fg11.jpg}
%		  ~\includegraphics[height=3.5cm]{./images/fg12.jpg}\\
%		  
%		  ~\includegraphics[height=3.5cm]{./images/fg13.jpg}
%		  ~\includegraphics[height=3.5cm]{./images/fg14.jpg}
%		  ~\includegraphics[height=3.5cm]{./images/fg15.jpg}
%			\caption{La foreground extraite avec le MOG, learning rate = 0.01}
%	  \end{figure}
%	\end{center}

\section{Fonctionnement du programme}
Pour lancer le programme, il faut simplement la commande:\\
\textit{\$ ./Vision3D image\_1 image\_2 <seuil de distance> <seuil de l'angle>}

Où:
\begin{itemize}
\item <seuil de distance> : pour obtenir les correspondances, si la distance $\leq$ seuil * la plus petite distance entre les correspondances \\
=> mettre comme une correspondance
\item <seuil de l'angle> : pour obtenir les correspondances qui ont l'angle avec la direction de tous les correspondances $\leq$ <seuil de l'angle>
\end{itemize}

Par exemple: \\
\textit{\$ ./Vision3D image/4a.jpeg image/4b.jpeg 5.0 20}

\section{Implémentation}
Les étapes pour faire la mise en correspondance:
\begin{itemize}
\item Détecter les SIFT keypoints
\item Calculer la distance entre les keypoints (utiliser le Flann maching)
\item Chercher la meilleur correspondance et choisir les autres correspondances selon elle\\
	si la distance entres les autres keypoints $\leq$ seuil * la meilleur correspondance \\
	$\Rightarrow$ mettre comme une correspondance

\item Calculer l'ensemble de direction des correspondances et leur moyenne distance $\Rightarrow$ obtenir le vector direction\\
	si l'angle de chaque paire de deux points correspondances avec le vector direction $\leq$ seuil angle 
	\textbf{et} leur distance $\leq$ 3 * la moyenne distance \\
		$\Rightarrow$ mettre comme une bonne correspondance
\item Dessiner les correspondances dans l'étape précédente dans le résultat
\end{itemize}


\section{Résultats}


	  \begin{figure}[htbp]
	  Voici le résultat avec certain seuil:\\
	  
	  		\centering
			\includegraphics[height=3.5cm]{./images/11raw_maching.png}
		  ~\includegraphics[height=3.5cm]{./images/11maching.png}
			\caption{les correspondances; seuil de distance = 5.0 ,seuil de l'angle = 20}
			\label{fig: 11}
	  \end{figure}


	  \begin{figure}[htbp]{
	  		\centering
			\includegraphics[height=3.5cm]{./images/12raw_maching.png}
		  ~\includegraphics[height=3.5cm]{./images/12maching.png}
			\caption{les correspondances; seuil de distance = 10.0 ,seuil de l'angle = 20}
			\label{fig: 12}}
			On voit que si seuil de distance augmente, on aura plus de point correspondance mais aussi plus d'erreurs.
	  \end{figure}

	  \begin{figure}[htbp]
	  		\centering
			\includegraphics[height=3.5cm]{./images/13raw_maching.png}
		  ~\includegraphics[height=3.5cm]{./images/13maching.png}
			\caption{les correspondances; seuil de distance = 20.0 ,seuil de l'angle = 20}
			\label{fig: 13}
	  \end{figure}

	  \begin{figure}[htbp]
	  Le résultat avec une autre image:\\
	  
	  		\centering
			\includegraphics[height=3.5cm]{./images/41raw_maching.png}
		  ~\includegraphics[height=3.5cm]{./images/41maching.png}
			\caption{les correspondances; seuil de distance = 5.0 ,seuil de l'angle = 20}
			\label{fig: 41}
	  \end{figure}


	  \begin{figure}[htbp]
	  Dans ce cas là, même on peut voir plusieurs correspondances mais il y a encore des bons candidats que le programme n'a pas encore trouvés. Si seuil de l'angle augmente:\\
	  
	  {	\centering
		\includegraphics[height=3.5cm]{./images/42raw_maching.png}
		 ~\includegraphics[height=3.5cm]{./images/42maching.png}
		\caption{les correspondances; seuil de distance = 5.0 ,seuil de l'angle = 80}
			\label{fig: 42}
		}
		Dans ce résultat, les bons candidats n'ont pas la même direction, car la position du caméra dans deux images n'est pas horizontale. Si seuil de l'angle = 180:
	  \end{figure}

	  \begin{figure}[htbp]
	  		\centering
			\includegraphics[height=3.5cm]{./images/43raw_maching.png}
		  ~\includegraphics[height=3.5cm]{./images/43maching.png}
			\caption{les correspondances; seuil de distance = 5.0 ,seuil de l'angle = 180}
			\label{fig: 43}
	  \end{figure}


	  \begin{figure}[htbp]
	  Un autre résultat:\\
	  
	  		\centering
			\includegraphics[height=3.5cm]{./images/21raw_maching.png}
		  ~\includegraphics[height=3.5cm]{./images/21maching.png}
			\caption{les correspondances; seuil de distance = 5.0 ,seuil de l'angle = 20}
			\label{fig: 21}
	  \end{figure}
	
	  \begin{figure}[htbp]
	  {		\centering
			\includegraphics[height=3.5cm]{./images/22raw_maching.png}
		  ~\includegraphics[height=3.5cm]{./images/22maching.png}
			\caption{les correspondances; seuil de distance = 5.0 ,seuil de l'angle = 180}
			\label{fig: 22}
		}
	  \end{figure}
	%-----------------------------------------------------------
	  
	  \begin{figure}[htbp]
	  Un autre résultat:\\
	  
	  {
	  		\centering
			\includegraphics[height=3.5cm]{./images/51raw_maching.png}
		  ~\includegraphics[height=3.5cm]{./images/51maching.png}
			\caption{les correspondances; seuil de distance = 5.0 ,seuil de l'angle = 20}
			\label{fig: 51}
		}	

		Ici, on ne voit pas les correspondances pour l'objet principal car elles sont moins nombreuses et ne sont pas dans la même direction que les autres.
	  \end{figure}
	
	  \begin{figure}[htbp]
	  		\centering
			\includegraphics[height=3.5cm]{./images/52raw_maching.png}
		  ~\includegraphics[height=3.5cm]{./images/52maching.png}
			\caption{les correspondances; seuil de distance = 5.0 ,seuil de l'angle = 100}
			\label{fig: 52}
	  \end{figure}

	  \begin{figure}[htbp]
	  		{\centering
			\includegraphics[height=3.5cm]{./images/53raw_maching.png}
		  ~\includegraphics[height=3.5cm]{./images/53maching.png}
			\caption{les correspondances; seuil de distance = 7.0 ,seuil de l'angle = 180}
			\label{fig: 53}}
		Dans les résultats ci-dessus, j'augmente la seuil de distance ,la seuil de l'angle. On peut voir plus les bons correspondances pour l'objet principal et peu de mauvais correspondance.
	  \end{figure}	  	
	%-----------------------------------------------------------	
	  \begin{figure}[htbp]
	  	Les résultats qu'on a vu sont assez bons, cependant il y a des cas que le résultat sont très mal:\\
	  	
	  		{\centering
			\includegraphics[height=3.5cm]{./images/31raw_maching.png}
		  ~\includegraphics[height=3.5cm]{./images/31maching.png}
			\caption{les correspondances; seuil de distance = 5.0 ,seuil de l'angle = 20}
		\label{fig: 31}	
		}
		Il y a des correspondances mais elles ne sont pas satisfaites des critères, on voit aucune correspondance dans le résultat. Je doit augmenter la seuil de l'angle jusqu'à 80 pour avoir des correspondances, mais elle sont encore peu nombreuse.
				
	  \end{figure}	
	

	  \begin{figure}[htbp]
	  		\centering
			\includegraphics[height=3.5cm]{./images/32raw_maching.png}
		  ~\includegraphics[height=3.5cm]{./images/32maching.png}
			\caption{les correspondances; seuil de distance = 5.0 ,seuil de l'angle = 80}
			\label{fig: 32}
	  \end{figure}

	
	
\pagebreak
\section{Réponses aux questions}

\textit{Que signifient les images résultats pour la mise en correspondance que vous obtenez ? Donnez des exemples de bons résultats de mise en correspondance et des exemples de mauvaises mises en correspondance (montrez sur les images). Expliquez en termes de directions et de distances des mises en correspondance obtenues.
}

Les images résultats pour la mise en correspondance signifient la transformation des points d'une image vers l'autre et l'inverse. Avec ces résultats on peut obtenir la matrice d'homographie.

Pour les bons résultats, on peut voir dans les figures: ~\ref{fig: 12}, ~\ref{fig: 11}, ~\ref{fig: 41}, ~\ref{fig: 42}, ~\ref{fig: 52}, ~\ref{fig: 53}; pour les mauvais résultats, ce sont les figures: ~\ref{fig: 13}, ~\ref{fig: 12}, ~\ref{fig: 22}, ~\ref{fig: 31}, ~\ref{fig: 32}. Dans ces exemples, on a des mauvais résultats car:
\begin{itemize}
\item En termes de directions : si les mouvements du caméra ne sont pas horizontale, ou il y a la rotation du caméra, les points correspondances dans deux images peuvent être transformer dans plusieurs directions. Si on applique la même direction pour tous les points, on manque des bons résultats, tel que dans les figures ~\ref{fig: 51}, ~\ref{fig: 32}, ~\ref{fig: 22}, ou ~\ref{fig: 42}.
\item En termes de distances des mises en correspondance : cette distance est plus grande quand le point est plus proche de la caméra ou du point perspective. Normalement, elle n'est pas trop grande par rapport aux autres, on peut enlever les correspondances dont la distance est trop grande. Cependant, il y a des correspondances dont la distance est proche que les autres, mais elles ne sont pas bonnes par exemple : les figures ~\ref{fig: 43}, ~\ref{fig: 13}. C'est à cause des descripteurs ou des caractéristiques: elle sont très ressembles, mais pas la même dans deux images.
\end{itemize}


\textit{Dans quels endroits dans les images observez-vous les meilleurs résultats ? les moins bons résultats ? Pourquoi (expliquez selon les caractéristiques observées dans les images) ?
}
%	\begin{center}
%	  \begin{figure}[ht]
%			\includegraphics[height=3.5cm]{./images/4_raw_maching.png}
%		  ~\includegraphics[height=3.5cm]{./images/4_maching.png}\\
%			\caption{les correspondances entre deux images}
%	  \end{figure}
%	\end{center}

Dans les régions non-homogènes, on voit que le résultat est meilleurs et dans les régions homogènes, le résultat est moins bon, parce que l'on peut détecter plusieurs SIFT keypoints dans les régions non-homogènes, on peut donc trouver plusieurs correspondances et l'inverse pour les régions homogènes. Par exemple, dans la figure ~\ref{fig: 32}, on ne trouve que quelques SIFT points, de plus, leur direction varie beaucoup.

	  
\textit{En inversant les images gauche et droite dans les arguments d’entrée de votre programme, est-ce que le résultat final est le même (a) visuellement (b) en termes d’informations 3D ? Expliquez ?}

\pagebreak
En inversant les images gauche et droite dans les arguments d’entrée du programme, le résultat n'est pas le même en terme 3D. Les points changent de gauche à droite et l'inverse. Cependant, la distance des points avec les caméra restes la même.

 	\begin{figure}[htbp]
	  		\centering
			\includegraphics[height=3.5cm]{./images/1_maching.png}
		  ~\includegraphics[height=3.5cm]{./images/1bmaching.png}
			\caption{l'inverse des images gauche et droite}
			\label{fig: inverse}
	\end{figure}
	 
	 
\textit{Selon vous, est-ce qu’il est possible de retrouver les paramètres de la géométrie épi-polaire à partir de vos résultats ? Si oui, expliquer en quelques mots comment.}

Oui, on peut les trouver par les points correspondances si leur nombre $\geq$ 7. Et si le nombre de bonnes correspondance, le résultat des paramètres est plus fiable. Pour obtenir la matrice fondamentale dans \textbf{OpenCV}, nous pouvons utiliser la fonction: \textbf{findFundamentalMat} et puis nous utilisons \textbf{computeCorrespondEpilines} pour calculer les droites épipolaires.

\section{Discussion/Conclusion}

Dans ce travail, j'ai fait la correspondance entre deux images pour trouver les informations de transformation. Pour obtenir un bon résultat, il faut tenir les directions de chaque correspondance, aussi leur distance. Pour les images homogènes c'est plus difficile de trouver des bonnes correspondances.




\end{document}